<?php
/**
 * Nweb Framework
 *
 * This script is protected by copyright. It's use, copying, modification
 * and distribution without written consent of the author is prohibited.
 *
 * @category    source
 * @package     pl.nweb.framework.configsz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @license     http://www.gnu.org/licenses/lgpl-3.0.txt  GNU Lesser General Public
 * @version     3.0 $Id$
 * @link        http://code.google.com/p/nweb-framework/
 * @link        http://framework.nweb.pl
 */

namespace pl\nweb\framework;

/**
 * Konfiguracja
 *
 * @category    source
 * @package     pl.nweb.framework.config
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @version     3.0 $Id$
 */
class Config
{
    /**
     * Dane
     *
     * @var array
     */
    private $_data = true;
    
    /**
     * Konstruktor
     *
     * @param array $data dane
     */
    public function __construct (array &$data = array())
    {
        $this->_data = &$data;
    }

    /**
     * Definiuje wartość
     *
     * @param  string $key klucz
     * @param  string $value wartość
     * @return void
     */
    public function __set ($key, $value)
    {
        $this->set($key, $value);
    }

    /**
     * Usunięcie zmiennej
     *
     * @param  string $key klucz
     * @return void
     */
    public function __unset ($key)
    {
        if(isset($this->_data[$key])) {
            unset($this->_data[$key]);
        }
    }

    /**
     * Zwrócenie wartości
     *
     * @param  string $key klucz
     * @return mixed
     */
    public function __get ($key)
    {
        return $this->get($key);
    }
    
    /**
     * Zwraca flagę czy zmienna została zdefiniowana
     *
     * @param  string $name nazwa zmiennej
     * @return boolean
     */
    public function __isset ($name)
    {
        return isset($this->_data[$key]);
    }
    
    /**
     * Definiowanie wartości
     *
     * @param  string $key nazwa
     * @param  mixed $value wartość
     * @return \pl\nweb\framework\Config
     */
    public function set ($key, $value)
    {
        $this->_data[$key] = $value;
        return $this;
    }
    
    /**
     * Zwrócenie wartości
     *
     * @param  string $key nazwa
     * @param  null|mixed $default domyślna wartość
     * @return null|mixed
     */
    public function get ($key, $default = null)
    {
        if(isset($this->_data[$key])) {
            return $this->_data[$key];
        }
        return $default;
    }

    /**
     * Zwraca flagę czy wartość istnieje
     *
     * @param  string $key klucz
     * @return boolean
     */
    public function has ($key)
    {
        return isset($this->_data[$key]);
    }
}